<?php
/**
 * Class that operate on table 'usuario'. Database Mysql.
 *
 * @author: http://phpdao.com
 * @date: 2013-11-23 21:12
 */
class UsuarioMySqlDAO implements UsuarioDAO{

	/**
	 * Get Domain object by primry key
	 *
	 * @param String $id primary key
	 * @return UsuarioMySql 
	 */
	public function load($id){
		$sql = 'SELECT * FROM usuario WHERE nro_identificacion = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->setNumber($id);
		return $this->getRow($sqlQuery);
	}

	/**
	 * Get all records from table
	 */
	public function queryAll(){
		$sql = 'SELECT * FROM usuario';
		$sqlQuery = new SqlQuery($sql);
		return $this->getList($sqlQuery);
	}
	
	/**
	 * Get all records from table ordered by field
	 *
	 * @param $orderColumn column name
	 */
	public function queryAllOrderBy($orderColumn){
		$sql = 'SELECT * FROM usuario ORDER BY '.$orderColumn;
		$sqlQuery = new SqlQuery($sql);
		return $this->getList($sqlQuery);
	}
	
	/**
 	 * Delete record from db2_tables(connection)
 	 * @param usuario primary key
 	 */
	public function delete($nro_identificacion){
		$sql = 'DELETE FROM usuario WHERE nro_identificacion = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->setNumber($nro_identificacion);
		return $this->executeUpdate($sqlQuery);
	}
	
	/**
 	 * Insert record to table
 	 *
 	 * @param UsuarioMySql usuario
 	 */
        //public function insert($usuario){
	public function insert($nroIdentificacion, $password, $nombreUsuario, $apellidosUsuario, $celular, $email, $idEvento, $estadoUsuario){
                //echo $usuario;
                //$usr = unserialize($usuario);
		$sql = 'INSERT INTO usuario (nro_identificacion, password, nombre_usuario, apellidos_usuario, celular, email, id_evento, estado_usuario) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
                $sqlQuery = new SqlQuery($sql);
                
                /*
		$sqlQuery->set($usr->password);
		$sqlQuery->set($usr->nombreUsuario);
		$sqlQuery->set($usr->apellidosUsuario);
		$sqlQuery->set($usr->celular);
		$sqlQuery->set($usr->email);
		$sqlQuery->setNumber($usr->idEvento);
		$sqlQuery->set($usr->estadoUsuario);
                */
                
                $sqlQuery->setNumber($nroIdentificacion);
                $sqlQuery->set($password);
		$sqlQuery->set($nombreUsuario);
		$sqlQuery->set($apellidosUsuario);
		$sqlQuery->set($celular);
		$sqlQuery->set($email);
		$sqlQuery->setNumber($idEvento);
		$sqlQuery->set($estadoUsuario);
                
		$id = $this->executeInsert($sqlQuery);	
		//$usuario->nroIdentificacion = $id;
		return $id;
	}
	
	/**
 	 * Update record in table
 	 *
 	 * @param UsuarioMySql usuario
 	 */
	//public function update($usuario){
        public function update($nroIdentificacion, $password, $nombreUsuario, $apellidosUsuario, $celular, $email, $estadoUsuario){
		$sql = 'UPDATE usuario SET password = ?, nombre_usuario = ?, apellidos_usuario = ?, celular = ?, email = ?, estado_usuario = ? WHERE nro_identificacion = ?';
		$sqlQuery = new SqlQuery($sql);
		/*
		$sqlQuery->set($usuario->password);
		$sqlQuery->set($usuario->nombreUsuario);
		$sqlQuery->set($usuario->apellidosUsuario);
		$sqlQuery->set($usuario->celular);
		$sqlQuery->set($usuario->email);
		$sqlQuery->setNumber($usuario->idEvento);
		$sqlQuery->set($usuario->estadoUsuario);
                $sqlQuery->setNumber(nroIdentificacion);
                */
                $sqlQuery->set($password);
		$sqlQuery->set($nombreUsuario);
		$sqlQuery->set($apellidosUsuario);
		$sqlQuery->set($celular);
		$sqlQuery->set($email);
		$sqlQuery->set($estadoUsuario);
		$sqlQuery->setNumber($nroIdentificacion);
                
		return $this->executeUpdate($sqlQuery);
	}

	/**
 	 * Delete all rows
 	 */
	public function clean(){
		$sql = 'DELETE FROM usuario';
		$sqlQuery = new SqlQuery($sql);
		return $this->executeUpdate($sqlQuery);
	}

	public function queryByPassword($value){
		$sql = 'SELECT * FROM usuario WHERE password = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}

	public function queryByNombreUsuario($value){
		$sql = 'SELECT * FROM usuario WHERE nombre_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}

	public function queryByApellidosUsuario($value){
		$sql = 'SELECT * FROM usuario WHERE apellidos_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}

	public function queryByCelular($value){
		$sql = 'SELECT * FROM usuario WHERE celular = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}

	public function queryByEmail($value){
		$sql = 'SELECT * FROM usuario WHERE email = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}

	public function queryByIdEvento($value){
		$sql = 'SELECT * FROM usuario WHERE id_evento = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->setNumber($value);
		return $this->getList($sqlQuery);
	}

	public function queryByEstadoUsuario($value){
		$sql = 'SELECT * FROM usuario WHERE estado_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->getList($sqlQuery);
	}


	public function deleteByPassword($value){
		$sql = 'DELETE FROM usuario WHERE password = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByNombreUsuario($value){
		$sql = 'DELETE FROM usuario WHERE nombre_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByApellidosUsuario($value){
		$sql = 'DELETE FROM usuario WHERE apellidos_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByCelular($value){
		$sql = 'DELETE FROM usuario WHERE celular = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByEmail($value){
		$sql = 'DELETE FROM usuario WHERE email = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByIdEvento($value){
		$sql = 'DELETE FROM usuario WHERE id_evento = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->setNumber($value);
		return $this->executeUpdate($sqlQuery);
	}

	public function deleteByEstadoUsuario($value){
		$sql = 'DELETE FROM usuario WHERE estado_usuario = ?';
		$sqlQuery = new SqlQuery($sql);
		$sqlQuery->set($value);
		return $this->executeUpdate($sqlQuery);
	}


	
	/**
	 * Read row
	 *
	 * @return UsuarioMySql 
	 */
	protected function readRow($row){
		$usuario = new Usuario();
		
		$usuario->nroIdentificacion = $row['nro_identificacion'];
		$usuario->password = $row['password'];
		$usuario->nombreUsuario = $row['nombre_usuario'];
		$usuario->apellidosUsuario = $row['apellidos_usuario'];
		$usuario->celular = $row['celular'];
		$usuario->email = $row['email'];
		$usuario->idEvento = $row['id_evento'];
		$usuario->estadoUsuario = $row['estado_usuario'];

		return $usuario;
	}
	
	protected function getList($sqlQuery){
		$tab = QueryExecutor::execute($sqlQuery);
		$ret = array();
		for($i=0;$i<count($tab);$i++){
			$ret[$i] = $this->readRow($tab[$i]);
		}
		return $ret;
	}
	
	/**
	 * Get row
	 *
	 * @return UsuarioMySql 
	 */
	protected function getRow($sqlQuery){
		$tab = QueryExecutor::execute($sqlQuery);
		if(count($tab)==0){
			return null;
		}
		return $this->readRow($tab[0]);		
	}
	
	/**
	 * Execute sql query
	 */
	protected function execute($sqlQuery){
		return QueryExecutor::execute($sqlQuery);
	}
	
		
	/**
	 * Execute sql query
	 */
	protected function executeUpdate($sqlQuery){
		return QueryExecutor::executeUpdate($sqlQuery);
	}

	/**
	 * Query for one row and one column
	 */
	protected function querySingleResult($sqlQuery){
		return QueryExecutor::queryForString($sqlQuery);
	}

	/**
	 * Insert row to table
	 */
	protected function executeInsert($sqlQuery){
		return QueryExecutor::executeInsert($sqlQuery);
	}
}
?>